package jeuDeLaVie;

import java.io.Serializable;
import java.util.ArrayList;


public class Environnement extends Observable implements Serializable{
        /**
         * 
         */
        private static final int TAILLE_X_ENV = 40;
        private static final int TAILLE_Y_ENV = 40;
        
        
        private static final long serialVersionUID = 3948920416700908236L;
                Cellule[][] carte;
        private int ressource1;
        private int ressource2;
        private int ressource3;
        private int ressource4;
        
        
        public Environnement() {
                ArrayList<Cellule> tampon;
                carte = new Cellule[TAILLE_X_ENV][TAILLE_Y_ENV];
            for (int i=0; i<TAILLE_X_ENV; i++){
                for(int j=0; j<TAILLE_Y_ENV; j++){
                        carte[i][j] = new Cellule();
                }
                ressource1 = 0;
                ressource2 = 0;
                ressource3 = 0;
                ressource4 = 0;
            }
            for (int i=TAILLE_X_ENV; i<2*TAILLE_X_ENV; i++){
                for(int j=TAILLE_Y_ENV; j<2*TAILLE_Y_ENV; j++){
                        tampon = new ArrayList<Cellule>();
                        tampon.add(carte[(i-1)%TAILLE_X_ENV][(j-1)%TAILLE_Y_ENV]);
                        tampon.add(carte[(i)%TAILLE_X_ENV][(j-1)%TAILLE_Y_ENV]);
                        tampon.add(carte[(i+1)%TAILLE_X_ENV][(j-1)%TAILLE_Y_ENV]);
                        tampon.add(carte[(i-1)%TAILLE_X_ENV][(j)%TAILLE_Y_ENV]);
                        tampon.add(carte[(i+1)%TAILLE_X_ENV][(j)%TAILLE_Y_ENV]);
                        tampon.add(carte[(i-1)%TAILLE_X_ENV][(j+1)%TAILLE_Y_ENV]);
                        tampon.add(carte[(i)%TAILLE_X_ENV][(j+1)%TAILLE_Y_ENV]);
                        tampon.add(carte[(i+1)%TAILLE_X_ENV][(j+1)%TAILLE_Y_ENV]);
                        carte[i%TAILLE_X_ENV][j%TAILLE_Y_ENV].setVoisins(tampon);
                }
            }
            
        }
        

        public int getEtatCellule(int x, int y){
                return (carte[x][y].getEtatCourant());
        }
        

        public int getRessource1(){
            return ressource1;
    }
        
        public void SetRessource1(int res){
            ressource1 = res;
    }
        
        public int getRessource2(){
            return ressource2;
    }
        
        public void SetRessource2(int res){
            ressource2 = res;
    }
        
        public int getRessource3(){
            return ressource3;
    }
        
        public void SetRessource3(int res){
            ressource3 = res;
    }
        
        public int getRessource4(){
            return ressource4;
    }
        
        public void SetRessource4(int res){
            ressource4 = res;
    }
        
        
        public void ville(){
        	
        }
        
        public void run1(Environnement env){
                // rajouter le time out
                for (int i=0; i<TAILLE_X_ENV; i++){
                        for (int j=0; j<TAILLE_Y_ENV; j++){
                                carte[i][j].saveEtatCellule();
                        }
                }
                for (int i=0; i<TAILLE_X_ENV; i++){
                        for (int j=0; j<TAILLE_Y_ENV; j++){
                                carte[i][j].updateEtatCellule1();
                        }
                }
                env.updateAll();
        }
        
     

        
        

        

        public void runs(Environnement env){
            // rajouter le time out
            for (int i=0; i<TAILLE_X_ENV; i++){
                    for (int j=0; j<TAILLE_Y_ENV; j++){
                            carte[i][j].saveEtatCellule();
                    }
            }
            for (int i=0; i<TAILLE_X_ENV; i++){
                    for (int j=0; j<TAILLE_Y_ENV; j++){
                            carte[i][j].updateEtatCellules();
                    }
            }
            env.updateAll();
    }
        
        
        public void rune(Environnement env){
            // rajouter le time out
            for (int i=0; i<TAILLE_X_ENV; i++){
                    for (int j=0; j<TAILLE_Y_ENV; j++){
                            carte[i][j].saveEtatCellule();
                    }
            }
            for (int i=0; i<TAILLE_X_ENV; i++){
                    for (int j=0; j<TAILLE_Y_ENV; j++){
                            carte[i][j].updateEtatCellulee(this);
                    }
            }
            env.updateAll();
    }
        
        
        
        public void runf(Environnement env){
            // rajouter le time out
              for (int i=0; i<TAILLE_X_ENV; i++){
                    for (int j=0; j<TAILLE_Y_ENV; j++){
                            carte[i][j].updateEtatCellulef();
                    }
            }
            env.updateAll();
    }
        

 
        
 
		public void generer1(){
			for (int i=0; i<TAILLE_X_ENV; i++){
                for(int j=0; j<TAILLE_Y_ENV; j++){
                	this.carte[i][j].naissance1();
                }
			}
			this.updateAll();
		}



					public void generers(){
						for (int i=0; i<TAILLE_X_ENV; i++){
			                for(int j=0; j<TAILLE_Y_ENV; j++){
			                	this.carte[i][j].naissances();
			                }
						}
						this.updateAll();
					}
					
					public void genererv(){
						for (int i=0; i<TAILLE_X_ENV; i++){
			                for(int j=0; j<TAILLE_Y_ENV; j++){
			                	this.carte[i][j].naissancev(this);
			                }
						}
						this.updateAll();
					}
					
					public void cree(int x,int y){
						this.carte[x][y].cree();
						this.updateAll();
					}
					
					public void preCree(int x,int y){
						this.carte[x][y].preCree();
						this.updateAll();
					}
}









